/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.trandio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.trandio.model.PacienteVO;
import org.trandio.util.ConexionDb;


/**
 *
 * @author root
 */
public class PacienteDAO implements PacienteInterface {

    @Override
    public List<PacienteVO> consultarPaciente(String ide, String n1, String n2, String a1, String a2) throws SQLException, NamingException {

        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String condicion = "";

        if(!ide.equals("")){
            condicion = " WHERE tb_paciente.numero_identificacion = '"+ide+"'";
        }

        if(!n1.equals("")&&!a1.equals("")){
            condicion = " WHERE tb_paciente.nombre1 = '"+n1+"' AND tb_paciente.apellido1 = '"+a1+"'";
        }

        List<PacienteVO> listPacienteVO = new ArrayList<PacienteVO>();        
        String sql = "SELECT " +
                      "tb_paciente.id,"+
                      "tb_paciente.id_tipo_identificacion,"+
                      "tb_paciente.numero_identificacion,"+
                      "tb_paciente.nombre1,"+
                      "tb_paciente.nombre2,"+
                      "tb_paciente.apellido1,"+
                      "tb_paciente.apellido2,"+
                      "tb_paciente.fecha_nacimiento,"+
                      "tb_paciente.id_sexo,"+
                      "tb_paciente.id_departamento,"+
                      "tb_paciente.id_municipio,"+
                      "tb_paciente.zona,"+
                      "tb_paciente.fecha_afil_ars,"+
                      "tb_paciente.id_tipopoblacion idtipopoblacion,"+
                      "tb_tipopoblacion.descripcion tipopoblacion,"+
                      "tb_paciente.nivel_sisben,"+
                      "tb_paciente.id_modalidadsubsidio,"+
                      "tb_paciente.id_entidad,"+
                      "tb_paciente.edad," +
                      "tb_paciente.estado," +
                      "tb_entidad.descripcion entidad," +
                      "tb_tipoidentificacion.codigo tipoide," +
                      "tb_sexo.descripcion sexo," +
                      "tb_tipopaciente.descripcion tipopaciente," +
                      "tb_tipopaciente.codigo codtipopaciente," +
                      "tb_tipoafiliacion.descripcion tipoafiliacion,"+
                      "tb_tipoafiliacion.id idtipoafiliacion"+                     
                      " FROM tb_paciente " +
                      "INNER JOIN tb_entidad ON (tb_paciente.id_entidad = tb_entidad.id_entidad) " +
                      "INNER JOIN tb_tipoidentificacion ON (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " +
                      "INNER JOIN tb_sexo ON (tb_paciente.id_sexo=tb_sexo.id) " +
                      "LEFT JOIN tb_tipopaciente ON (tb_paciente.id_tipopaciente = tb_tipopaciente.id) " +
                      "LEFT JOIN tb_tipoafiliacion ON (tb_paciente.id_tipoafiliacion = tb_tipoafiliacion.id) "+
                      "LEFT JOIN tb_tipopoblacion ON (tb_paciente.id_tipopoblacion = tb_tipopoblacion.id) "+condicion;

        System.out.println("Sql BUSCAR paciente: "+sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PacienteVO pacienteVO = new PacienteVO();
                    pacienteVO.setId(res.getInt("id"));
                    pacienteVO.setNumero_identificacion(res.getString("numero_identificacion"));
                    pacienteVO.setNombre1(res.getString("nombre1"));
                    pacienteVO.setNombre2(res.getString("nombre2"));
                    pacienteVO.setApellido1(res.getString("apellido1"));
                    pacienteVO.setApellido2(res.getString("apellido2"));
                    pacienteVO.setNombres(res.getString("nombre1")+" "+res.getString("nombre2"));
                    pacienteVO.setApellidos(res.getString("apellido1")+" "+res.getString("apellido2"));
                    pacienteVO.setFecha_nacimiento(res.getDate("fecha_nacimiento"));
                    pacienteVO.setEntidad(res.getString("entidad"));
                    pacienteVO.setTipoide(res.getString("tipoide"));
                    pacienteVO.setNivel(res.getString("nivel_sisben"));
                    pacienteVO.setSexo(res.getString("sexo"));
                    pacienteVO.setTipopaciente(res.getString("tipopaciente"));
                    pacienteVO.setTipoafiliacion(res.getString("tipoafiliacion"));
                    pacienteVO.setId_entidad(res.getInt("id_entidad"));
                    pacienteVO.setIdtipoafiliacion(res.getInt("idtipoafiliacion"));
                    pacienteVO.setCodtipopaciente(res.getString("codtipopaciente"));
                    pacienteVO.setId_tipopoblacion(res.getInt("idtipopoblacion"));
                    pacienteVO.setTipopoblacion(res.getString("tipopoblacion"));
                    pacienteVO.setEstp(res.getBoolean("estado"));
                   
                    listPacienteVO.add(pacienteVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed())
               conn.close();
        }

        return listPacienteVO;
    }


    @Override
    public List<PacienteVO> consultarPaciente(String ide, String n1, String a1) throws SQLException, NamingException {

        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String condicion = "";

        if(!ide.equals("")){
            condicion = " WHERE tb_paciente.numero_identificacion = '"+ide+"'";
        }

        if(!n1.equals("")&&!a1.equals("")){
            condicion = " WHERE tb_paciente.nombre1 = '"+n1+"' AND tb_paciente.apellido1 = '"+a1+"'";
        }

        List<PacienteVO> listPacienteVO = new ArrayList<PacienteVO>();
        String sql = "SELECT " +
                      "tb_paciente.id,"+
                      "tb_paciente.id_tipo_identificacion,"+
                      "tb_paciente.numero_identificacion,"+
                      "tb_paciente.nombre1,"+
                      "tb_paciente.nombre2,"+
                      "tb_paciente.apellido1,"+
                      "tb_paciente.apellido2,"+
                      "tb_paciente.fecha_nacimiento,"+
                      "tb_paciente.id_sexo,"+
                      "tb_paciente.id_departamento,"+
                      "tb_paciente.id_municipio,"+
                      "tb_paciente.zona,"+
                      "tb_paciente.fecha_afil_ars,"+
                      "tb_paciente.id_tipopoblacion idtipopoblacion,"+
                      "tb_tipopoblacion.descripcion tipopoblacion,"+
                      "tb_paciente.nivel_sisben,"+
                      "tb_paciente.id_modalidadsubsidio,"+
                      "tb_paciente.id_entidad,"+
                      "tb_paciente.edad," +
                      "tb_paciente.estado," +
                      "tb_entidad.descripcion entidad," +
                      "tb_tipoidentificacion.codigo tipoide," +
                      "tb_sexo.descripcion sexo," +
                      "tb_tipopaciente.descripcion tipopaciente," +
                      "tb_tipopaciente.codigo codtipopaciente," +
                      "tb_tipoafiliacion.descripcion tipoafiliacion,"+
                      "tb_tipoafiliacion.id idtipoafiliacion"+
                      " FROM tb_paciente " +
                      "INNER JOIN tb_entidad ON (tb_paciente.id_entidad = tb_entidad.id_entidad) " +
                      "INNER JOIN tb_tipoidentificacion ON (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " +
                      "INNER JOIN tb_sexo ON (tb_paciente.id_sexo=tb_sexo.id) " +
                      "LEFT JOIN tb_tipopaciente ON (tb_paciente.id_tipopaciente = tb_tipopaciente.id) " +
                      "LEFT JOIN tb_tipoafiliacion ON (tb_paciente.id_tipoafiliacion = tb_tipoafiliacion.id) "+
                      "LEFT JOIN tb_tipopoblacion ON (tb_paciente.id_tipopoblacion = tb_tipopoblacion.id) "+condicion;

        System.out.println("Sql BUSCAR paciente: "+sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PacienteVO pacienteVO = new PacienteVO();
                    pacienteVO.setId(res.getInt("id"));
                    pacienteVO.setNumero_identificacion(res.getString("numero_identificacion"));
                    pacienteVO.setNombre1(res.getString("nombre1"));
                    pacienteVO.setNombre2(res.getString("nombre2"));
                    pacienteVO.setApellido1(res.getString("apellido1"));
                    pacienteVO.setApellido2(res.getString("apellido2"));
                    pacienteVO.setNombres(res.getString("nombre1")+" "+res.getString("nombre2"));
                    pacienteVO.setApellidos(res.getString("apellido1")+" "+res.getString("apellido2"));
                    pacienteVO.setFecha_nacimiento(res.getDate("fecha_nacimiento"));
                    pacienteVO.setEntidad(res.getString("entidad"));
                    pacienteVO.setTipoide(res.getString("tipoide"));
                    pacienteVO.setNivel(res.getString("nivel_sisben"));
                    pacienteVO.setSexo(res.getString("sexo"));
                    pacienteVO.setTipopaciente(res.getString("tipopaciente"));
                    pacienteVO.setTipoafiliacion(res.getString("tipoafiliacion"));
                    pacienteVO.setId_entidad(res.getInt("id_entidad"));
                    pacienteVO.setIdtipoafiliacion(res.getInt("idtipoafiliacion"));
                    pacienteVO.setCodtipopaciente(res.getString("codtipopaciente"));
                    pacienteVO.setId_tipopoblacion(res.getInt("idtipopoblacion"));
                    pacienteVO.setTipopoblacion(res.getString("tipopoblacion"));
                    pacienteVO.setEstp(res.getBoolean("estado"));

                    listPacienteVO.add(pacienteVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed())
               conn.close();
        }

        return listPacienteVO;
    }




    @Override
    public int guardarPaciente(PacienteVO pacienteVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();


         System.out.println("INSERTAR PACIENTE");

        String sqlAdiciona  ="INSERT INTO tb_paciente("+
            "id_tipo_identificacion, numero_identificacion, nombre1, nombre2,"+
            "apellido1, apellido2, fecha_nacimiento, id_sexo, id_departamento,"+
            "id_municipio, zona, fecha_afil_ars, id_tipopoblacion, nivel_sisben,"+
            "id_modalidadsubsidio, id_entidad,direccion, telefono,"+
            "id_discapacidad, grupo_sanguineo,estado) "+
            "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) RETURNING id;";


        PreparedStatement stmt = conn.prepareStatement(sqlAdiciona);

        java.util.Date fecnac = pacienteVO.getFecha_nacimiento();
        java.util.Date fecars = pacienteVO.getFecha_afil_ars();
        java.sql.Date fecnacsql = new java.sql.Date(fecnac.getTime());
        java.sql.Date fecarssql = new java.sql.Date(fecars.getTime());
        
        
        int estp = (pacienteVO.isEstp() == true) ? 1 : 0;

        stmt.setInt(1,pacienteVO.getId_tipo_identificacion());
        stmt.setString(2,pacienteVO.getNumero_identificacion());
        stmt.setString(3,pacienteVO.getNombre1());
        stmt.setString(4,pacienteVO.getNombre2());
        stmt.setString(5,pacienteVO.getApellido1());
        stmt.setString(6,pacienteVO.getApellido2());
        stmt.setDate(7,fecnacsql);
        stmt.setInt(8,pacienteVO.getId_sexo());
        stmt.setInt(9,pacienteVO.getId_departamento());
        stmt.setInt(10,pacienteVO.getId_municipio());
        stmt.setInt(11,pacienteVO.getId_zona());
        stmt.setDate(12,fecarssql);
        stmt.setInt(13,pacienteVO.getId_tipopoblacion());
        stmt.setInt(14,pacienteVO.getId_nivel());
        stmt.setInt(15,pacienteVO.getId_modalidadsubsidio());
        stmt.setInt(16,pacienteVO.getId_entidad());
        stmt.setString(17,pacienteVO.getDireccion());
        stmt.setString(18,pacienteVO.getTelefono());
        stmt.setInt(19,pacienteVO.getId_discapacidad());
        stmt.setString(20,pacienteVO.getGrupo_saguineo());
        stmt.setInt(21,estp);
       
        ResultSet rs = stmt.executeQuery();
        rs.next();
        int resp = rs.getInt(1);
       
        rs.close();
	stmt.close();
        if (!conn.isClosed())
               conn.close();
        return resp;
    }

    @Override
    public PacienteVO getPaciente(int id) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "SELECT id, id_tipo_identificacion, numero_identificacion, nombre1, nombre2,"+
                     "apellido1, apellido2, fecha_nacimiento, id_sexo, id_departamento,"+
                     "id_municipio, zona, fecha_afil_ars, id_tipopoblacion, nivel_sisben,"+
                     "id_modalidadsubsidio, id_entidad, edad, direccion, telefono,"+
                     "id_discapacidad, grupo_sanguineo, estado"+
                     " FROM tb_paciente"+
                     " WHERE tb_paciente.id ="+id;

        System.out.println("Sql buacar paciente ID: "+sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        PacienteVO pacienteVO = new PacienteVO();
        try{
        ResultSet res = stmt.executeQuery();
        try{

        if (res.next()) {
                pacienteVO.setId(res.getInt("id"));
                pacienteVO.setId_tipo_identificacion(res.getInt("id_tipo_identificacion"));
                pacienteVO.setNumero_identificacion(res.getString("numero_identificacion"));
                pacienteVO.setNombre1(res.getString("nombre1"));
                pacienteVO.setNombre2(res.getString("nombre2"));
                pacienteVO.setApellido1(res.getString("apellido1"));
                pacienteVO.setApellido2(res.getString("apellido2"));
                pacienteVO.setFecha_nacimiento(res.getDate("fecha_nacimiento"));
                pacienteVO.setId_sexo(res.getInt("id_sexo"));
                pacienteVO.setId_departamento(res.getInt("id_departamento"));
                pacienteVO.setId_municipio(res.getInt("id_municipio"));
                pacienteVO.setId_zona(res.getInt("zona"));
                pacienteVO.setFecha_afil_ars(res.getDate("fecha_afil_ars"));
                pacienteVO.setId_tipopoblacion(res.getInt("id_tipopoblacion"));
                pacienteVO.setId_nivel(res.getInt("nivel_sisben"));
                pacienteVO.setId_modalidadsubsidio(res.getInt("id_modalidadsubsidio"));
                pacienteVO.setId_entidad(res.getInt("id_entidad"));
                pacienteVO.setDireccion(res.getString("direccion"));
                pacienteVO.setTelefono(res.getString("telefono"));
                pacienteVO.setId_discapacidad(res.getInt("id_discapacidad"));
                pacienteVO.setGrupo_saguineo(res.getString("grupo_sanguineo"));
                pacienteVO.setEstp(res.getBoolean("estado"));
            }
        }finally{
         res.close();
        }
        }finally{
         stmt.close();
         if (!conn.isClosed())
               conn.close();
        }
        return pacienteVO;

    }

    @Override
    public void guardarPacienteEdit(PacienteVO pacienteVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "UPDATE tb_paciente"+
                     " SET id_tipo_identificacion=?, numero_identificacion=?, nombre1=?,"+
                     "nombre2=?, apellido1=?, apellido2=?, fecha_nacimiento=?, id_sexo=?,"+ 
                     "id_departamento=?, id_municipio=?, zona=?, fecha_afil_ars=?,"+ 
                     "id_tipopoblacion=?, nivel_sisben=?, id_modalidadsubsidio=?, id_entidad=?,"+ 
                     "direccion=?, telefono=?, id_discapacidad=?, grupo_sanguineo=?, estado=?"+
                     " WHERE tb_paciente.id="+pacienteVO.getId();

                System.out.println("SQL del Update paciente="+sql);

		PreparedStatement stmt = conn.prepareStatement(sql);

                java.util.Date fecnac = pacienteVO.getFecha_nacimiento();
                java.util.Date fecars = pacienteVO.getFecha_afil_ars();
                java.sql.Date fecnacsql = new java.sql.Date(fecnac.getTime());
                java.sql.Date fecarssql = new java.sql.Date(fecars.getTime());
                
                int estp = (pacienteVO.isEstp() == true) ? 1 : 0;

                stmt.setInt(1,pacienteVO.getId_tipo_identificacion());
                stmt.setString(2,pacienteVO.getNumero_identificacion());
                stmt.setString(3,pacienteVO.getNombre1());
                stmt.setString(4,pacienteVO.getNombre2());
                stmt.setString(5,pacienteVO.getApellido1());
                stmt.setString(6,pacienteVO.getApellido2());
                stmt.setDate(7,fecnacsql);
                stmt.setInt(8,pacienteVO.getId_sexo());
                stmt.setInt(9,pacienteVO.getId_departamento());
                stmt.setInt(10,pacienteVO.getId_municipio());
                stmt.setInt(11,pacienteVO.getId_zona());
                stmt.setDate(12,fecarssql);
                stmt.setInt(13,pacienteVO.getId_tipopoblacion());
                stmt.setInt(14,pacienteVO.getId_nivel());
                stmt.setInt(15,pacienteVO.getId_modalidadsubsidio());
                stmt.setInt(16,pacienteVO.getId_entidad());
                stmt.setString(17,pacienteVO.getDireccion());
                stmt.setString(18,pacienteVO.getTelefono());
                stmt.setInt(19,pacienteVO.getId_discapacidad());
                stmt.setString(20,pacienteVO.getGrupo_saguineo());
                stmt.setInt(21,estp);

		stmt.execute();
		stmt.close();
                if (!conn.isClosed())
               conn.close();
    }

    @Override
    public PacienteVO consultarPaciente(String identificacion) throws SQLException, NamingException {
         ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String condicion = " WHERE tb_paciente.numero_identificacion='"+identificacion+"'";

         String sql = "SELECT " +
                      "tb_paciente.id,"+
                      "tb_paciente.id_tipo_identificacion,"+
                      "tb_paciente.numero_identificacion,"+
                      "tb_paciente.nombre1,"+
                      "tb_paciente.nombre2,"+
                      "tb_paciente.apellido1,"+
                      "tb_paciente.apellido2,"+
                      "tb_paciente.fecha_nacimiento,"+
                      "tb_paciente.id_sexo,"+
                      "tb_paciente.id_departamento,"+
                      "tb_paciente.id_municipio,"+
                      "tb_paciente.zona,"+
                      "tb_paciente.fecha_afil_ars,"+
                      "tb_paciente.id_tipopoblacion idtipopoblacion,"+
                      "tb_tipopoblacion.descripcion tipopoblacion,"+
                      "tb_paciente.nivel_sisben,"+
                      "tb_paciente.id_modalidadsubsidio,"+
                      "tb_paciente.id_entidad,"+
                      "tb_paciente.edad," +
                      "tb_paciente.estado," +
                      "tb_entidad.descripcion entidad," +
                      "tb_tipoidentificacion.codigo tipoide," +
                      "tb_sexo.descripcion sexo," +
                      "tb_tipopaciente.descripcion tipopaciente," +
                      "tb_tipopaciente.codigo codtipopaciente," +
                      "tb_tipoafiliacion.descripcion tipoafiliacion,"+
                      "tb_tipoafiliacion.id idtipoafiliacion"+
                      " FROM tb_paciente " +
                      "INNER JOIN tb_entidad ON (tb_paciente.id_entidad = tb_entidad.id_entidad) " +
                      "INNER JOIN tb_tipoidentificacion ON (tb_paciente.id_tipo_identificacion = tb_tipoidentificacion.id) " +
                      "INNER JOIN tb_sexo ON (tb_paciente.id_sexo=tb_sexo.id) " +
                      "LEFT JOIN tb_tipopaciente ON (tb_paciente.id_tipopaciente = tb_tipopaciente.id) " +
                      "LEFT JOIN tb_tipoafiliacion ON (tb_paciente.id_tipoafiliacion = tb_tipoafiliacion.id) "+
                      "LEFT JOIN tb_tipopoblacion ON (tb_paciente.id_tipopoblacion = tb_tipopoblacion.id) "+condicion;


        System.out.println("Sql buscar paciente IDentificacion: "+sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        PacienteVO pacienteVO = new PacienteVO();
        try{
        ResultSet res = stmt.executeQuery();
        try{

        if (res.next()) {
            pacienteVO.setId(res.getInt("id"));
            pacienteVO.setNumero_identificacion(res.getString("numero_identificacion"));
            pacienteVO.setNombre1(res.getString("nombre1"));
            pacienteVO.setNombre2(res.getString("nombre2"));
            pacienteVO.setApellido1(res.getString("apellido1"));
            pacienteVO.setApellido2(res.getString("apellido2"));
            pacienteVO.setNombres(res.getString("nombre1")+" "+res.getString("nombre2"));
            pacienteVO.setApellidos(res.getString("apellido1")+" "+res.getString("apellido2"));
            pacienteVO.setFecha_nacimiento(res.getDate("fecha_nacimiento"));
            pacienteVO.setEntidad(res.getString("entidad"));
            pacienteVO.setId_tipo_identificacion(res.getInt("id_tipo_identificacion"));
            pacienteVO.setTipoide(res.getString("tipoide"));
            pacienteVO.setNivel(res.getString("nivel_sisben"));
            pacienteVO.setSexo(res.getString("sexo"));
            pacienteVO.setTipopaciente(res.getString("tipopaciente"));
            pacienteVO.setTipoafiliacion(res.getString("tipoafiliacion"));
            pacienteVO.setId_entidad(res.getInt("id_entidad"));
            pacienteVO.setIdtipoafiliacion(res.getInt("idtipoafiliacion"));
            pacienteVO.setCodtipopaciente(res.getString("codtipopaciente"));
            pacienteVO.setId_tipopoblacion(res.getInt("idtipopoblacion"));
            pacienteVO.setTipopoblacion(res.getString("tipopoblacion"));
            pacienteVO.setIdsexo(res.getInt("id_sexo"));
            pacienteVO.setEstp(res.getBoolean("estado"));
            }
        }finally{
         res.close();
        }
        }finally{
         stmt.close();
         if (!conn.isClosed())
               conn.close();
        }
        return pacienteVO;
    }

    @Override
    public int getCantPacientes(String $sWhere) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        int count = 0;

        String sql = "SELECT count(*) FROM tb_paciente";

            PreparedStatement stmt = conn.prepareStatement(sql);

            try{
            ResultSet res = stmt.executeQuery();
            try{
            if (res.next()) {
                count = res.getInt(1);
            }
            }finally{
                res.close();
            }
            }finally{
                stmt.close();
                if (!conn.isClosed())
               conn.close();
            }

        return count;
    }

    @Override
    public List<PacienteVO> getPacientes(int displayStart, int displayLength, String $sWhere, String orden) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

         List<PacienteVO> lista = new ArrayList<PacienteVO>();
         String condicion = "";

         if(!$sWhere.equals("")){
            //condicion = " WHERE tb_factura.numero LIKE '%"+param+"%' ";
             condicion = $sWhere;
         }



        String sql = "SELECT id, id_tipo_identificacion, numero_identificacion, nombre1, nombre2,"+
                     "apellido1, apellido2, fecha_nacimiento, id_sexo, id_departamento,"+
                     "id_municipio, zona, fecha_afil_ars, id_tipopoblacion, nivel_sisben,"+
                     "id_modalidadsubsidio, id_entidad, edad, direccion, telefono,"+
                     "id_discapacidad, grupo_sanguineo, estado"+
                     " FROM tb_paciente "+condicion+" "+orden+" LIMIT "+displayLength+" OFFSET "+displayStart;

    
        System.out.println(sql);
        
        PreparedStatement stmt = conn.prepareStatement(sql);

        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PacienteVO objVO = new PacienteVO();
                    objVO.setId(res.getInt("id"));
                    objVO.setNumero_identificacion(res.getString("numero_identificacion"));
                    objVO.setNombre1(res.getString("nombre1"));
                    objVO.setNombre2(res.getString("nombre2"));
                    objVO.setApellido1(res.getString("apellido1"));
                    objVO.setApellido2(res.getString("apellido2"));
                    lista.add(objVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
           if (!conn.isClosed())
               conn.close();
        }

        return lista;
    }

}